// XMLHttpRequest 객체를 반환하거나, 브라우저가 지원하지 않는다면 false를 반환한다
function newXMLHttpRequest() {
	var xmlReq = false;
	
	// IE가 아닌 브라우저에서 XMLHttpRequest객체를 생성한다.
	if(window.XMLHttpRequest) {
		xmlReq = new XMLHttpRequest();
	}
	else if(window.ActiveXObject) {
		try {
			// IE 최신 버전에서 XMLHttpRequest 객체 생성
			xmlReq = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e1) { // 요구한 ActiveX객체 생성 실패 시
			try { // 예전 버전의 IE를 지원하기 위한 코드
				xmlReq = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e2) {
				// 어떠한 경우에도 생성하지 못할 때
				xmlReq = false;
			}
		}
	}
	
	return xmlReq;
}

// XMLHttpRequest를 대기한 후, XML응답을 핸들러 함수에게 보내는 함수를 반환
// req XMLHttpRequest의 상태
// responseXmlHandler XML 응답이 보내어질 함수
function getReadyStateXmlHandler(req, responseXmlHandler) {
	// XMLHttpRequest 인스턴스 응답을 기다리는 함수 반환
	return function() {
		// 요청의 상태가 complete이면
		if(req.readyState == 4) {
			// 서버로부터 응답을 성공적으로 받았는지 검사
			if(req.status == 200) {
				// XML응답을 핸들러 함수에 전달
				responseXmlHandler(req.responseXML);
			}
			else { // HTTP 문제가 발생했을 때
				alert("HTTP error " + req.status + " : " + req.statusText);
			}
		}
	}
}